﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using CPTECH.Repository;
using CPTECH.Business;
using System.IO;

namespace CPTECH.Presentation
{
    public partial class frm_menu : frm_default
    {
        public frm_menu()
        {
            InitializeComponent();
        }

        //sai da aplicação
        private void mnu_sair_Click(object sender, EventArgs e)
        {
            if (FisicoDB.getInstance().checkGeraLote())
            {
                MessageBox.Show("Aguarde, Gerando Lote!", "Gerando Lote");
                SendFtpBO.getInstance().GerarLote();
                FisicoDB.getInstance().atualizaEnviado();

                //grava registro de gerarLote.
                RegisterBO.getInstance().registerGeraLote();
            }
            else
            {
                Application.Exit();
            }
        }

        //chama form de filial
        private void mnu_prosseguir_Click(object sender, EventArgs e)
        {
            frm_confTelas configurar = new frm_confTelas();//cria instancia.
            configurar.showForm(this);//chama o novo passando o atual como parâmetro
        }

        //chama formulário de configuração de Telas.
        private void mnu_confTelas_Click(object sender, EventArgs e)
        {
            frm_confTelas confTelas = new frm_confTelas();//cria instancia.
            confTelas.showForm(this);//chama o form novo usando método herdado.
        }

        //chama método que gera o lote.
        private void mnu_geralote_Click(object sender, EventArgs e)
        {
            SendFtpBO.getInstance().GerarLote();
            FisicoDB.getInstance().atualizaEnviado();

            //grava registro de gerarLote.
            RegisterBO.getInstance().registerGeraLote();
        }

        //chama tela e lista lotes gerados.
        private void menuItem1_Click(object sender, EventArgs e)
        {
            frm_lotes lotes = new frm_lotes();//cria nova instancia do form.
            lotes.showForm(this);//chama o form
        }

        //chama formulário de alteração de item.
        private void mnu_altItem_Click(object sender, EventArgs e)
        {
            frm_alterarItem alterar = new frm_alterarItem();
            alterar.showForm(this);
        }

        //chama formulário de validação de inventário.
        private void menuItem2_Click(object sender, EventArgs e)
        {
            frm_validarInv validar = new frm_validarInv();
            validar.showForm(this);
        }

        //chama o método que cria as pastas e os arquivos de log.
        private void frm_menu_Load(object sender, EventArgs e)
        {
            createFoldersAndLog();
        }

        //método que  cria as pastas e arquivos de log.
        private void createFoldersAndLog()
        {
            String batch = (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\BatchFiles");
            String backUP = (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\BackUP");
            String lastFic = (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\lastFic.txt");
            String lastIdSeq = (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\lastID.txt");
            String logFile = (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\LFileTech.zip");

            if (!Directory.Exists(batch))
            {
                Directory.CreateDirectory(batch);
            }

            if (!Directory.Exists(backUP))
            {
                Directory.CreateDirectory(backUP);
            }

            if (!File.Exists(lastFic))
            {
                File.Create(lastFic);
            }

            if (!File.Exists(lastIdSeq))
            {
                File.Create(lastIdSeq);
            }

            if (!File.Exists(logFile))
            {
                File.Create(logFile);
            }
        }

        //pega numero do ultimo ficticio gerado.
        private int getLastFic()
        {
            int last = 0;
            StreamReader sr = new StreamReader((System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\lastFic.txt"));
            while (!sr.EndOfStream)
            {
                last = int.Parse(sr.ReadLine());
            }
            sr.Close();
            return last;
        }

        //pega numero do ultimo ficticio gerado.
        private int getLastID()
        {
            int last = 0;
            StreamReader sr = new StreamReader((System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\lastID.txt"));
            while (!sr.EndOfStream)
            {
                last = int.Parse(sr.ReadLine());
            }
            sr.Close();
            return last;
        }
    }
}